home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d13 / qptech.arc / TI394.ASC < prev    next >
Text File  |  1991-04-25  |  8KB  |  331 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8. PRODUCT  :  QUATTRO PRO                            NUMBER  :  394
  9. VERSION  :  ALL
  10.      OS  :  DOS
  11.    DATE  :  March 16, 1991                 PAGE  :  1/5
  12.  
  13.   TITLE  :  ROUNDING ERRORS AND THE PERSONAL COMPUTER
  14.  
  15.  
  16.  
  17.  
  18. Rounding errors are an inherent limitation of the PC and the way
  19. it stores real numbers in binary format.  Even though you enter a
  20. value as 123.456, for example, it may be stored in memory (in a
  21. binary form) as 123.455899.  At this point, you already have a
  22. rounding error.  If you use this value in a calculation, it can
  23. further compound the rounding error factor.
  24.  
  25. When real numbers are stored in memory, they are translated to a
  26. binary format without decimal points.  Many fractional values
  27. cannot be accurately stored in this binary format.  Consider the
  28. following examples:
  29.         2
  30.      4      =    2
  31.         1+ 0
  32.      3      =    2  2
  33.         1
  34.      2      =    2
  35.         0
  36.      1      =    2
  37.         -1
  38.      1/2  =    2
  39.         -2
  40.      1/4  =    2
  41.         -2  -4    -6  -8        -n
  42.      1/3  =    2  +2  +2  +2  +....2    where -n is infinity
  43.         -3
  44.      1/8  =    2
  45.  
  46. These examples illustrate how different values are represented in
  47. binary notation.  Any integer value can be represented in a valid
  48. binary format.    However, some fractions (specifically 1/3) can't
  49. be accurately stored in the binary format.  In fact, 1/3 can't be
  50. accurately displayed in base 10 (.3333333333....).
  51.  
  52. Taking a closer look at the value 1/3, in decimal notation, this
  53. value appears as .3333333333 and continues through infinity.  We
  54. can round this value to .3333333, .33, .3, or possibly .3333334.
  55. In any form, rounding has taken place and the accuracy of the
  56. value has been compromised.  The same general concept holds true
  57. in binary format.
  58.  
  59. One thing to keep in mind is that many applications (including
  60. Quattro Pro) store values to 15 precision places.  Changing the
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70.  
  71.  
  72.  
  73.  
  74. PRODUCT  :  QUATTRO PRO                            NUMBER  :  394
  75. VERSION  :  ALL
  76.      OS  :  DOS
  77.    DATE  :  March 16, 1991                 PAGE  :  2/5
  78.  
  79.   TITLE  :  ROUNDING ERRORS AND THE PERSONAL COMPUTER
  80.  
  81.  
  82.  
  83.  
  84. format of a cell entry (ie. (F2)-Fixed with two decimal places)
  85. does not change the actual value as it is stored in the cell.
  86. Again, an example:  if cell A1 contains the value 123.456, the
  87. computer may store this value as 123.455899.  Changing the
  88. display format to F2 will display the value in the cell as
  89. 123.46.  However, the actual value has not changed, only the
  90. appearance.
  91.  
  92.  
  93. EXAMPLE 1
  94.  
  95.  
  96.  
  97. This example assumes the following information is stored in the
  98. spreadsheet:
  99.  
  100.       86978.13        <- Derived from a formula
  101.       93115.70        <- Derived from a formula
  102.      180093.82        <- The sum of the first formulas
  103.  
  104. At first glance, the calculation looks incorrect; or is it?
  105. Let's look at some possible examples of how the total (180093.82)
  106. may have been calculated.
  107.  
  108. The cell containing the value 86978.13 only displays the first
  109. two decimal places of the resulting formula.  The actual value
  110. resulting from this formula could range from 86978.125 to
  111. 86978.134 (this is a simplified example since we are not taking
  112. into account the additional places of precision).  The actual
  113. value resulting from the second formula could range from
  114. 93115.695 to 93115.704.  With these ranges of values, we can
  115. compute different results:
  116.  
  117. 1st Value   +    2nd Value   =    Result(?)    F2 Format
  118. 86978.125    93115.695    180093.820    180093.82
  119. 86978.126    93115.696    180093.822    180093.82
  120. 86978.127    93115.697    180093.824    180093.82
  121. 86978.128    93115.698    180093.826    180093.83
  122. 86978.129    93115.699    180093.828    180093.83
  123. 86978.130    93115.700    180093.830    180093.83
  124. 86978.131    93115.701    180093.832    180093.83
  125. 86978.132    93115.702    180093.834    180093.83
  126. 86978.133    93115.703    180093.836    180093.84
  127.  
  128.  
  129.  
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136.  
  137.  
  138.  
  139.  
  140. PRODUCT  :  QUATTRO PRO                            NUMBER  :  394
  141. VERSION  :  ALL
  142.      OS  :  DOS
  143.    DATE  :  March 16, 1991                 PAGE  :  3/5
  144.  
  145.   TITLE  :  ROUNDING ERRORS AND THE PERSONAL COMPUTER
  146.  
  147.  
  148.  
  149.  
  150. 86978.134    93115.704    180093.838    180093.84
  151.  
  152. Again, this example is over simplified by the fact that we have
  153. used the upper and lower limits consistently through the
  154. equations.  Any combination of the 1st Value and 2nd Value can
  155. actually be used to reach the Result.
  156.  
  157. To achieve accurate results for this example, the formula should
  158. be written as:
  159.  
  160.      @ROUND(@ROUND(86978.13,2)+@ROUND(93115.7,2),2)
  161.  
  162. This formula rounds each value (which was derived from a
  163. formula), as well as the resulting value to two decimal places.
  164. The result is 180093.83.
  165.  
  166.  
  167. EXAMPLE 2
  168.  
  169.  
  170.  
  171. This example presents the procedure in Example 1 in a more
  172. technical form.  Consider the following C program:
  173.  
  174. #include <stdio.h>
  175. void main(void)
  176.  
  177. {
  178.      float a, b, c;
  179.      a = 86978.13;
  180.      b = 93115.70;
  181.      c = a + b;
  182.      printf("%15.10f %15.10f %15.10f\n",a,b,c);
  183. }
  184.  
  185. As you can see, the values in this example are hard-coded into
  186. the program.  However, when this program is compiled and
  187. executed, the resulting values are as follows:
  188.  
  189.      a:    86978.1328125000
  190.      b:    93115.7031250000
  191.      c:   180093.8437500000
  192.  
  193.  
  194.  
  195.  
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202.  
  203.  
  204.  
  205.  
  206. PRODUCT  :  QUATTRO PRO                            NUMBER  :  394
  207. VERSION  :  ALL
  208.      OS  :  DOS
  209.    DATE  :  March 16, 1991                 PAGE  :  4/5
  210.  
  211.   TITLE  :  ROUNDING ERRORS AND THE PERSONAL COMPUTER
  212.  
  213.  
  214.  
  215.  
  216. It is clear that the values assigned to variables a and b have
  217. been altered when translated to binary format and placed into
  218. memory.  This variation is further carried to the result, c.
  219. Visually, the results for variable c should be 180093.8359375000
  220. (assuming you have accepted the rounding errors for variables a
  221. and b).  However, the rounding error has compounded to provide
  222. further discrepancies.
  223.  
  224. Don't let this information cast doubt over the ability of a
  225. computer.  There are different ways you can obtain accurate
  226. results.  Most programs that perform mathematical calculations
  227. support a floating-point emulator.  This is a program routine
  228. which attempts to emulate a coprocessor.  Another method is
  229. through a math coprocessor.  Coprocessors are the best and
  230. fastest means for handling the manipulation of floating point
  231. (real) numbers, since the calculations are performed internally.
  232.  
  233. Quattro Pro provides a floating-point emulation routine and
  234. support for a math coprocessor chip.  It also provides the @ROUND
  235. function which lets you round all values to a given degree of
  236. precision.
  237.  
  238. In your example, if you use the command @ROUND(your formula,2),
  239. where your formula is the formula currently in the cells, you
  240. will achieve the desired results.
  241.  
  242. When should you use @ROUND in your formulas?  Whenever you are
  243. performing any type of calculation on real numbers where
  244. precision is of the utmost importance.
  245.  
  246. Again, do not let this information sway your faith in the
  247. abilities of a computer or any other piece of hardware/software.
  248. This is simply a limitation based on the architecture of the
  249. computer industry.  Software developers throughout the industry
  250. are aware of this limitation and do their best to work with it,
  251. not against it.
  252.  
  253.  
  254. Testing for Equality
  255.  
  256.  
  257.  
  258.  
  259.  
  260.  
  261.  
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268.  
  269.  
  270.  
  271.  
  272. PRODUCT  :  QUATTRO PRO                            NUMBER  :  394
  273. VERSION  :  ALL
  274.      OS  :  DOS
  275.    DATE  :  March 16, 1991                 PAGE  :  5/5
  276.  
  277.   TITLE  :  ROUNDING ERRORS AND THE PERSONAL COMPUTER
  278.  
  279.  
  280.  
  281.  
  282. When testing values for equality, use the @ROUND function to
  283. alleviate any chances or rounding errors which can provide
  284. incorrect results.  For example, if cell A1 and cell A2 contain
  285. formulas which return the same result, testing for A1=A2 may
  286. return false due to rounding errors.
  287.  
  288.      @IF(A1=A2,"Equal","Not Equal")
  289.  
  290. This formula may not always return "True" as expected.    However,
  291. rewriting the formula as:
  292.  
  293.      @IF(@ROUND(A1,2)=@ROUND(A2,2),"True","False")
  294.  
  295. will provide a more reliable result.
  296.  
  297. When using the first format, the values may appear equal in the
  298. cells.    However, subtracting the cell values (eg. +A1-A2) may
  299. return a very small difference (eg. .00001).  This will cause the
  300. @IF statement to return "False."  This is why the @ROUND function
  301. should be used.
  302.  
  303.  
  304.  
  305.  
  306.  
  307.  
  308.  
  309.  
  310.  
  311.  
  312.  
  313.  
  314.  
  315.  
  316.  
  317.  
  318.  
  319.  
  320.  
  321.  
  322.  
  323.  
  324.  
  325.  
  326.  
  327.  
  328.  
  329.  
  330.  
  331.